package main

import (
	"fmt"
	"sync"
)

// 编写一个Go程序，使用两个goroutine交替打印数字和字母。
// 第一个goroutine打印数字1到10，第二个goroutine打印字母’A’到’J’。
// 要求交替打印，即输出序列为：1, A, 2, B, 3, C, … , 10, J。
func main() {
	var socket = make(chan struct{}, 1)
	var wg sync.WaitGroup
	wg.Add(2)

	go printNum(&wg, socket)

	go printStr(&wg, socket)
	socket <- struct{}{}

	wg.Wait()
}

func printNum(wg *sync.WaitGroup, socket chan struct{}) {
	defer wg.Done()
	for i := 1; i <= 10; i++ {
		<-socket
		fmt.Println(i)
		socket <- struct{}{}
	}
}

func printStr(wg *sync.WaitGroup, socket chan struct{}) {
	defer wg.Done()
	for i := 'A'; i <= 'J'; i++ {
		<-socket
		fmt.Printf("%c\n", i)
		socket <- struct{}{}
	}
}
